#id 字段通常会在所有模型中，并且用于作为主键。在数据库的每一个用户会被赋予一个不同的 id 值，
# 存储在这个字段中。幸好这是自动完成的，我们仅仅需要的是提供 id 这个字段。
#nickname 以及 email 字段是被定义成字符串，并且指定了最大的长度以便数据库可以优化空间占用。


#我们说过想要连接用户和他们写的 blog。方式就是通过在 posts 增加一个字段，这个字段包含了编写 blog 的用户的 id。这个 id 称为一个外键。
# 我们的数据库设计工具把外键显示成一个连线，这根连线连接于 users 表中的 id 与 posts 表中的 user_id。这种关系称为一对多，一个用户编写多篇 blog。
from idna import unicode

from app import db

class User (db.Model):
    id = db.Column(db.Integer,primary_key=True)
    nickname = db.Column(db.String(64),index=True,unique=True)
    email = db.Column(db.String(120),index=True,unique=True)
    posts = db.relationship('Post', backref='author', lazy='dynamic')

#在我们的 User 类中实现一些特定的方法。但是类如何去实现这些方法却没有什么要求
  #  is_authenticated
   # 方法有一个具有迷惑性的名称。一般而言，这个方法应该只返回
    #True，除非表示用户的对象因为某些原因不允许被认证。

   # is_active
   # 方法应该返回
    #True，除非是用户是无效的，比如因为他们的账号是被禁止。

   # is_anonymous
    #方法应该返回
    #True，如果是匿名的用户不允许登录系统。
    @property
    def is_authenticated(self):
        return True

    @property
    def is_active(self):
        return True

    @property
    def is_anonymous(self):
        return False


    def get_id(self):
        try:
            return unicode(self.id)  # python 2
        except NameError:
            return str(self.id)  # python 3

    def __repr__(self):
        return '<User %r>' % (self.nickname)



    def __repr__(self):
        return '<User %r' %(self.nickname)

#我们添加了一个 Post 类，这是用来表示用户编写的 blog。在 Post 类中的 user_id 字段初始化成外键，
# 因此 Flask-SQLAlchemy 知道这个字段是连接到用户上。
#值得注意的是我们已经在 User 类中添加一个新的字段称为 posts，# 它是被构建成一个 db.relationship 字段。
# 这并不是一个实际的数据库字段，因此是不会出现在上面的图中。对于一个一对多的关系，db.relationship 字段通常是定义在“一”这一边。
# 在这种关系下，我们得到一个 user.posts 成员，它给出一个用户所有的 blog。不用担心很多细节不知道什么意思，以后我们会不断地看到例子。

class Post(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    body = db.Column(db.String(140))
    timestamp = db.Column(db.DateTime)
    user_id = db.Column(db.Integer,db.ForeignKey('user.id'))


    def __repr__(self):
        return '<Post%r>' % (self.body)


#t返回头像的任务
from hashlib import md5
class User(db.Model):
    size = 50

    def avatar(self,size):
        return 'http://www.nipic.com/show/3/109/39a392ea9afa1e7b.html'+ md5(self.email).hexdigest() + '?d=mm&s='+str(size)